Don't assert if the xrootwin is invalid. (#309997, Barbie LeVille)
authorMatthias Clasen <mclasen@redhat.com>
Thu, 14 Jul 2005 14:37:34 +0000 (14:37 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Thu, 14 Jul 2005 14:37:34 +0000 (14:37 +0000)
2005-07-14  Matthias Clasen  <mclasen@redhat.com>

* gdk/x11/gdkevents-x11.c (set_screen_from_root): Don't assert if
the xrootwin is invalid.  (#309997, Barbie LeVille)
(gdk_event_translate): Ignore events with an invalid root field.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/x11/gdkevents-x11.c

index d675582b99241db436639851b4a83335837566b7..df555d5e62d6797a147f25ea647dd7ece72b953b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2005-07-14  Matthias Clasen  <mclasen@redhat.com>
 
+       * gdk/x11/gdkevents-x11.c (set_screen_from_root): Don't assert if 
+       the xrootwin is invalid.  (#309997, Barbie LeVille)
+       (gdk_event_translate): Ignore events with an invalid root field.
+
        * configure.in: Set interface age to 0.
 
        * gtk/gtkimmodule.h: Move G_BEGIN_DECLS to the right spot, noticed
index d675582b99241db436639851b4a83335837566b7..df555d5e62d6797a147f25ea647dd7ece72b953b 100644 (file)
@@ -1,5 +1,9 @@
 2005-07-14  Matthias Clasen  <mclasen@redhat.com>
 
+       * gdk/x11/gdkevents-x11.c (set_screen_from_root): Don't assert if 
+       the xrootwin is invalid.  (#309997, Barbie LeVille)
+       (gdk_event_translate): Ignore events with an invalid root field.
+
        * configure.in: Set interface age to 0.
 
        * gtk/gtkimmodule.h: Move G_BEGIN_DECLS to the right spot, noticed
index d675582b99241db436639851b4a83335837566b7..df555d5e62d6797a147f25ea647dd7ece72b953b 100644 (file)
@@ -1,5 +1,9 @@
 2005-07-14  Matthias Clasen  <mclasen@redhat.com>
 
+       * gdk/x11/gdkevents-x11.c (set_screen_from_root): Don't assert if 
+       the xrootwin is invalid.  (#309997, Barbie LeVille)
+       (gdk_event_translate): Ignore events with an invalid root field.
+
        * configure.in: Set interface age to 0.
 
        * gtk/gtkimmodule.h: Move G_BEGIN_DECLS to the right spot, noticed
index 4a45cf6984f8d7d7dcc8c442f633baa2a41a010c..74e99913562710c124f9f9b62ded517b9de7cf06 100644 (file)
@@ -570,7 +570,7 @@ generate_focus_event (GdkWindow *window,
   gdk_event_put (&event);
 }
 
-static void
+static gboolean
 set_screen_from_root (GdkDisplay *display,
                      GdkEvent   *event,
                      Window      xrootwin)
@@ -578,9 +578,15 @@ set_screen_from_root (GdkDisplay *display,
   GdkScreen *screen;
 
   screen = _gdk_x11_display_screen_for_xrootwin (display, xrootwin);
-  g_assert (screen);
 
-  gdk_event_set_screen (event, screen);
+  if (screen)
+    {
+      gdk_event_set_screen (event, screen);
+
+      return TRUE;
+    }
+  
+  return FALSE;
 }
 
 static void
@@ -1107,8 +1113,12 @@ gdk_event_translate (GdkDisplay *display,
          event->scroll.y_root = (gfloat)xevent->xbutton.y_root;
          event->scroll.state = (GdkModifierType) xevent->xbutton.state;
          event->scroll.device = display->core_pointer;
-
-         set_screen_from_root (display, event, xevent->xbutton.root);
+         
+         if (!set_screen_from_root (display, event, xevent->xbutton.root))
+           {
+             return_val = FALSE;
+             break;
+           }
          
           break;
           
@@ -1125,7 +1135,11 @@ gdk_event_translate (GdkDisplay *display,
          event->button.button = xevent->xbutton.button;
          event->button.device = display->core_pointer;
          
-         set_screen_from_root (display, event, xevent->xbutton.root);
+         if (!set_screen_from_root (display, event, xevent->xbutton.root))
+           {
+             return_val = FALSE;
+             break;
+           }
 
          _gdk_event_button_generate (display, event);
           break;
@@ -1171,7 +1185,11 @@ gdk_event_translate (GdkDisplay *display,
       event->button.button = xevent->xbutton.button;
       event->button.device = display->core_pointer;
 
-      set_screen_from_root (display, event, xevent->xbutton.root);
+      if (!set_screen_from_root (display, event, xevent->xbutton.root))
+       {
+         return_val = FALSE;
+         break;
+       }
 
       _gdk_xgrab_check_button_event (window, xevent);
       break;
@@ -1190,7 +1208,7 @@ gdk_event_translate (GdkDisplay *display,
          return_val = FALSE;
          break;
        }
-      
+
       event->motion.type = GDK_MOTION_NOTIFY;
       event->motion.window = window;
       event->motion.time = xevent->xmotion.time;
@@ -1203,8 +1221,12 @@ gdk_event_translate (GdkDisplay *display,
       event->motion.is_hint = xevent->xmotion.is_hint;
       event->motion.device = display->core_pointer;
       
-      set_screen_from_root (display, event, xevent->xmotion.root);
-      
+      if (!set_screen_from_root (display, event, xevent->xbutton.root))
+       {
+         return_val = FALSE;
+         break;
+       }
+            
       break;
       
     case EnterNotify:
@@ -1220,6 +1242,12 @@ gdk_event_translate (GdkDisplay *display,
           break;
         }
       
+      if (!set_screen_from_root (display, event, xevent->xbutton.root))
+       {
+         return_val = FALSE;
+         break;
+       }
+      
       /* Handle focusing (in the case where no window manager is running */
       if (toplevel && xevent->xcrossing.detail != NotifyInferior)
        {
@@ -1259,8 +1287,6 @@ gdk_event_translate (GdkDisplay *display,
       event->crossing.x_root = xevent->xcrossing.x_root;
       event->crossing.y_root = xevent->xcrossing.y_root;
       
-      set_screen_from_root (display, event, xevent->xcrossing.root);
-      
       /* Translate the crossing mode into Gdk terms.
        */
       switch (xevent->xcrossing.mode)
@@ -1316,7 +1342,13 @@ gdk_event_translate (GdkDisplay *display,
           return_val = FALSE;
           break;
         }
-      
+
+      if (!set_screen_from_root (display, event, xevent->xbutton.root))
+       {
+         return_val = FALSE;
+         break;
+       }
+                  
       /* Handle focusing (in the case where no window manager is running */
       if (toplevel && xevent->xcrossing.detail != NotifyInferior)
        {
@@ -1350,8 +1382,6 @@ gdk_event_translate (GdkDisplay *display,
       event->crossing.x_root = xevent->xcrossing.x_root;
       event->crossing.y_root = xevent->xcrossing.y_root;
       
-      set_screen_from_root (display, event, xevent->xcrossing.root);
-      
       /* Translate the crossing mode into Gdk terms.
        */
       switch (xevent->xcrossing.mode)